from typing import Optional, Literal
from sqlmodel import SQLModel, Field

from app.models.base import TimestampMixin


class LaAlbum(TimestampMixin, table=True):
    __tablename__ = "la_album"

    id: int = Field(default=None, primary_key=True)  # 主键ID
    cid: int = Field(gt=0, default=0)  # 类目ID，必须大于等于0
    aid: int = Field(gt=0, default=0)  # 管理员ID，必须大于等于0
    uid: int = Field(gt=0, default=0)  # 用户ID，必须大于等于0
    type: Literal[10, 20] = Field(default=10)  # 文件类型: [10=图片, 20=视频, 30=音频, 40=文档, 50=其他]
    name: str = Field(default="", max_length=100)  # 文件名称
    uri: str = Field(default="", max_length=200)  # 文件路径
    ext: str = Field(default="", max_length=10)  # 文件扩展名
    size: int = Field(ge=0, default=0)  # 文件大小，非负数
    is_delete: int = Field(default=0, ge=0, le=1)  # 是否删除: [0=否, 1=是]
    create_time: int = Field(ge=0, default=0)  # 创建时间（Unix时间戳）
    update_time: int = Field(ge=0, default=0)  # 更新时间（Unix时间戳）


class LaAlbumCate(TimestampMixin, table=True):
    __tablename__ = "la_album_cate"

    id: int = Field(default=None, primary_key=True)  # 主键ID
    pid: int = Field(gt=0, default=0)  # 父级ID，必须大于等于0
    type: Literal[10, 20] = Field(default=10)  # 类型: [10=图片, 20=视频, 30=音频, 40=文档, 50=其他]
    name: str = Field(default="", max_length=32)  # 分类名称
    is_delete: int = Field(default=0, ge=0, le=1)  # 是否删除: [0=否, 1=是]
    create_time: int = Field(ge=0, default=0)  # 创建时间（Unix时间戳）
    update_time: int = Field(ge=0, default=0)  # 更新时间（Unix时间戳）
